home *** CD-ROM | disk | FTP | other *** search
/ The Fatted Calf / The Fatted Calf.iso / Applications / Games / Solitaire / Sources / Spider / SpiderGameDelegate.m < prev    next >
Text File  |  1994-01-23  |  2KB  |  94 lines

  1. /* indent:4  tabsize:8  font:fixed-width */
  2.  
  3. #import "SpiderGameDelegate.h"
  4. #import "SpiderSuitDelegate.h"
  5. #import "../Solitaire/Solitaire.h"
  6. #import "Spider.h"
  7.  
  8. @implementation SpiderGameDelegate
  9.  
  10. - clickedCard:aCard in:aCardPileView
  11. {
  12.     id cardPile = [aCardPileView cardPile];
  13.  
  14.     if ((aCard == [cardPile cardAt:CS_TOP]) && (![aCard isFaceUp]))
  15.     {
  16.         [aCard flip];
  17.         [aCardPileView display];
  18.     }
  19.     return self;
  20. }
  21.  
  22.  
  23.  
  24. - (BOOL)draggedPile:aCardPile from:aCardPileView
  25. {
  26.     id cardPile = [aCardPileView cardPile];
  27.     id firstCard = [aCardPile cardAt:CS_TOP];
  28.     int cardIndex = [cardPile cardIndex:firstCard];
  29.     int i;
  30.     int total;
  31.     id newCard;
  32.     CardSuit suit;
  33.     CardValue lastValue;
  34.     
  35.     if ([firstCard isFaceUp])
  36.     {
  37.         total = [cardPile cardCount];
  38.         lastValue = [firstCard value];
  39.     suit = [firstCard suit];
  40.  
  41.     /* Can only drag if all cards above are same suit and in
  42.        descending sequence */
  43.         for (i = cardIndex + 1; i < total; i++)
  44.     {
  45.         newCard = [cardPile cardAt:i];
  46.         if ([newCard suit] != suit) return NO;
  47.             if ([newCard value] != --lastValue) return NO;
  48.     }
  49.  
  50.         /* Move cards above dragged card onto temporary pile */
  51.         while (++cardIndex < [cardPile cardCount])
  52.         {
  53.             [aCardPile addCard:[cardPile cardAt:cardIndex]];
  54.         }
  55.         return YES;
  56.     }
  57.     return NO;
  58. }
  59.  
  60.  
  61. - (BOOL)canAcceptPile:aCardPile from:sender in:aCardPileView
  62. {
  63.     id droppingCard = [aCardPile cardAt:CS_BOTTOM];
  64.     id targetCard = [[aCardPileView cardPile] cardAt:CS_TOP];
  65.     
  66.     if (targetCard)
  67.     {
  68.         if (([targetCard isFaceUp]) &&
  69.                 ([targetCard value] == [droppingCard value] + 1))
  70.         {
  71.             return YES;
  72.         }
  73.     }
  74.     else
  75.     {
  76.         return YES;
  77.     }
  78.     return NO;
  79. }
  80.  
  81.  
  82. - getOffset:(float *) xOffset :(float *) yOffset forSize:(CardSize)aSize
  83. {
  84.     *xOffset = 0.0;
  85.     if (aSize == CS_SMALL)
  86.         *yOffset = 20.0;
  87.     else
  88.         *yOffset = 25.0;
  89.         
  90.     return self;
  91. }
  92.  
  93. @end
  94.